using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;


namespace SIM_TPN_1a
{
    public partial class Form1 : Form
    {
        Generador oGenerador = null;

        public Form1()
        {
            InitializeComponent();
        }

        private void btnCalcular_Click(object sender, EventArgs e)
        {
            if (oGenerador == null)
            {
                int c =0 , m = 0, a = 0;
                
                try
                {
                    c = int.Parse(txtC.Text);
                    a = int.Parse(txtA.Text);
                    m = int.Parse(txtM.Text);
                

                if (c % 2 == 0 || c % 3 == 0 || c % 5 == 0)
                {
                    MessageBox.Show("El numero c debe ser impar y no divisible ni por 3 ni por 5");
                    txtC.Focus();
                    return;
                }
                
                if (a % 8 != 5)
                {
                    MessageBox.Show("El resto de la division de a con 8 debe ser 5");
                    txtA.Focus();
                    return;
                }

                oGenerador = new Generador();
                oGenerador.C = c;
                oGenerador.A = a;
                oGenerador.M = m;
                try
                {
                    switch (cmbMetodo.SelectedIndex)
                    {
                        case 0:
                            lstResultado.Items.Add(oGenerador.generar(Generador.METODO_MEDIOS_CUADRADOS, Convert.ToInt32(txtSemilla.Text)));
                            break;
                        case 1:
                            lstResultado.Items.Add(oGenerador.generar(Generador.METODO_CONGRUENCIAL_MIXTO, Convert.ToInt32(txtSemilla.Text)));
                            break;
                        case 2:
                            lstResultado.Items.Add(oGenerador.generar(Generador.METODO_CONGRUENCIAL_ADITIVO, Convert.ToInt32(txtSemilla.Text), Convert.ToInt32(txtSemilla.Text)));
                            break;
                    }

                    for (int i = 1; i < 20; i++)
                    {
                        lstResultado.Items.Add(oGenerador.generar());
                    }
                    this.txtSemilla.Enabled = false;
                    this.txtSemilla2.Enabled = false;
                    this.cmbMetodo.Enabled = false;
                }

                catch (Exception ex)
                {

                    MessageBox.Show(ex.Message);
                    this.oGenerador = null;
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            }
            else
            {
                lstResultado.Items.Add(oGenerador.generar());
                lstResultado.SelectedIndex = lstResultado.Items.Count - 1;
            }
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            this.txtSemilla.Enabled = true;
            this.txtSemilla2.Enabled = true;
            this.cmbMetodo.Enabled = true;
            this.lstResultado.Items.Clear();
            this.oGenerador = null;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.cmbMetodo.SelectedIndex = 1;
        }

    }
}